﻿// README
// There are two steps to adding a property:
// 1. Create a member variable to store your property
// 2. Add the get_ and set_ accessors for your property.
// Remember that both are case sensitive!
// 
// Desarrollado para MACL System Corp.
// Descripcion : Control para las validaciones de entrada para los textbox
// Controla el input del lado del cliente.
// Fecha: Enero 2012
// Creado por : Miguel Calderon
// Modificado por:
// Modulo: Modulo javascript encargardo de toda la validacion y eventos de lado 
// del cliente, AjaxControlToolkit 3.5 .
Type.registerNamespace('WeclValidador');
WeclValidador.WeclValidadorBehavior = function(element) {
    WeclValidador.WeclValidadorBehavior.initializeBase(this, [element]);
    // TODO : (Step 1) Add your property variables here
    //this._TipoValidacion=  WeclValidador.TiposValidacion.SinValidacion;
}

WeclValidador.WeclValidadorBehavior.prototype = {
    initialize: function() {
        WeclValidador.WeclValidadorBehavior.callBaseMethod(this, 'initialize');
        // TODO: add your initalization code here
        this._keypressHandler = Function.createDelegate(this, this._onKeyPress);
        $addHandler(this.get_element(), 'keypress', this._keypressHandler);
        //this._keyupHandler = Function.createDelegate(this, this._onKeyUp);
        //        $addHandler(this.get_element(), 'keyup', this._keyupHandler);
        this._blurHandler = Function.createDelegate(this, this._onBlur);
        $addHandler(this.get_element(), 'blur', this._blurHandler);
        this._focusHandler = Function.createDelegate(this, this._onFocus);
        $addHandler(this.get_element(), 'focus', this._focusHandler);
    },

    dispose: function() {
        // TODO: add your cleanup code here
        $clearHandlers(this.get_element());
        WeclValidador.WeclValidadorBehavior.callBaseMethod(this, 'dispose');
    },

    // TODO: (Step 2) Add your property accessors here
    // tipo validacion
    get_TipoValidacion: function() {
        return this._TipoValidacion;
    },
    set_TipoValidacion: function(value) {
        this._TipoValidacion = value;
    },
    // se permite signo negativo
    get_SePermiteNegativo: function() {
        return this._SePermiteNegativo;
    },
    set_SePermiteNegativo: function(value) {
        this._SePermiteNegativo = value;
    },
    // se permite signo negativo
    get_NumeroDecimales: function() {
        return this._NumeroDecimales;
    },
    set_NumeroDecimales: function(value) {
        this._NumeroDecimales = value;
    },
    get_CadenaEvaluacion: function() {
        return this._CadenaEvaluacion;
    },
    set_CadenaEvaluacion: function(value) {
        this._CadenaEvaluacion = value;
    },
    //*****************************************************
    //Evento lanzado al presionar una tecla sobre el control   
    //*****************************************************
    //*****************************************************
    //Evento lanzado al presionar una tecla sobre el control   
    //*****************************************************
    _onKeyPress: function(evt) {
        var scanCode;
        scanCode = evt.charCode;

        var filtro = "";
        filtro = this._obtenerCaracteresValidos();
        var c = String.fromCharCode(scanCode);
        var SeAceptaElCaracter = filtro && (filtro.length > 0) && (filtro.indexOf(c) > -1);
        if (SeAceptaElCaracter) // validamos que la info quede consistente
        {
            var textofinal = this.get_element().value + c;
            var textoevaluacion = textofinal;
            switch (this._TipoValidacion) {   //SinValidacion
                case 0: { break; }
                    //ValidarEntero
                case 1:
                    {
                        if (c == "-") {
                            textoevaluacion = this._controlarSignoNegativo(textofinal);
                            SeAceptaElCaracter = textofinal == textoevaluacion;
                        }
                        break;
                    }
                    //ValidarDecimal =0x2,
                case 2:
                    {

                        if ((c == "-") || (c == ".")) {
                            textoevaluacion = this._controlarSignoNegativo(textofinal);
                            textoevaluacion = this._controlarPuntoDecimal(textoevaluacion);
                            SeAceptaElCaracter = textofinal == textoevaluacion;
                        }
                        break;
                    }
                    //ValidarNombres= 0x3,
                case 3: { break; }
                    //ValidarMail=0x4,
                case 4: { break; }
                    //ValidarFecha = 0x5,
                case 5: { break; }
                    //ValidarDireccion = 0x6,
                case 6: { break; }
                    //ValidarTelefono = 0x7,
                case 7: { break; }
                    //ValidarDocIdentidad=0x8,
                case 8: { break; }
                    //ValidarSoloCaracteres= 0x9
                case 9: { break; }
            }

        } else {
            switch (this._TipoValidacion) {   //SinValidacion
                case 0: { break; }
                    //ValidarEntero
                case 1: { break; }
                    //ValidarDecimal =0x2,
                case 2: { break; }
                    //ValidarNombres= 0x3,
                case 3:
                    {
                        if ((scanCode == 209) || (scanCode == 241)) // para la ñ y Ñ
                        {
                            SeAceptaElCaracter = true;
                        }
                        break;
                    }
                    //ValidarMail=0x4,
                case 4:
                    {
                        if ((scanCode == 209) || (scanCode == 241)) // para la ñ y Ñ
                        {
                            SeAceptaElCaracter = true;
                        }
                        break;
                    }
                    //ValidarFecha = 0x5,
                case 5: { break; }
                    //ValidarDireccion = 0x6,
                case 6:
                    {
                        if ((scanCode == 209) || (scanCode == 241)) // para la ñ y Ñ
                        {
                            SeAceptaElCaracter = true;
                        }
                        break;
                    }
                    //ValidarTelefono = 0x7,
                case 7: { break; }
                    //ValidarDocIdentidad=0x8,
                case 8: { break; }
                    //ValidarSoloCaracteres= 0x9
                case 9:
                    {
                        if ((scanCode == 209) || (scanCode == 241)) // para la ñ y Ñ
                        {
                            SeAceptaElCaracter = true;
                        }
                        break;
                    }
            }
        }
        return SeAceptaElCaracter;

    },

    //*****************************************************
    //Evento lanzado al soltar una tecla sobre el control   
    // Esta funcion no es utilizada por el momento
    //*****************************************************
    _onKeyUp: function(evt) {
        var temp = this.get_element().value
        //alert(temp);

        switch (this._TipoValidacion) {   //SinValidacion
            case 0: { break; }
                //ValidarEntero
            case 1: { temp = this._controlarSignoNegativo(temp); break; }
                //ValidarDecimal =0x2,
            case 2:
                {
                    temp = this._controlarSignoNegativo(temp);
                    temp = this._controlarPuntoDecimal(temp); break;
                }
                //ValidarNombres= 0x3,
            case 3: { break; }
                //ValidarMail=0x4,
            case 4: { break; }
                //ValidarFecha = 0x5,
            case 5: { break; }
                //ValidarDireccion = 0x6,
            case 6: { break; }
                //ValidarTelefono = 0x7,
            case 7: { break; }
                //ValidarDocIdentidad=0x8,
            case 8: { break; }
                //ValidarSoloCaracteres= 0x9
            case 9: { break; }
        }
        this.get_element().value = temp;
        this.get_element().focus();

    },
    //*****************************************************
    //Evento lanzado al dejar el foco del control   
    //*****************************************************
    _onBlur: function(evt) {
        var temp = this.get_element().value
        //alert(temp);

        switch (this._TipoValidacion) {   //SinValidacion
            case 0: { break; }
                //ValidarEntero
            case 1: { temp = this._darFormatoEntero(temp); break; }
                //ValidarDecimal =0x2,
            case 2: { temp = this._darFormatoDecimal(temp); break; }
                //ValidarNombres= 0x3,
            case 3: { break; }
                //ValidarMail=0x4,
            case 4: { break; }
                //ValidarFecha = 0x5,
            case 5: { break; }
                //ValidarDireccion = 0x6,
            case 6: { break; }
                //ValidarTelefono = 0x7,
            case 7: { break; }
                //ValidarDocIdentidad=0x8,
            case 8: { break; }
                //ValidarSoloCaracteres= 0x9
            case 9: { break; }
        }
        this.get_element().value = temp;

    },
    _onFocus: function(evt) {




    },
    //******************************************************************
    // COMPLEMENTOS PARA LAS VALIDACIONES
    //*******************************************************************
    _obtenerCaracteresValidos: function() {
        /// <summary>
        /// Obtiene todos los caracteres validos
        /// Tomese en cuenta que si no se encuentra valores en *.config tomara los valores por defecto
        /// </summary>
        /// <returns type="String">
        /// Todos los caracteres validos
        /// </returns>
        // estos tipos estan de acuerdo a lo definido a TipoValidacion
        return this._CadenaEvaluacion;
    },
    // para la validacion de enteros y decimales
    _controlarSignoNegativo: function(temp) {
        // debe existir un solo signo negativo
        var tieneNegativo = temp.length > 0 && temp.charAt(0) == '-';
        var caracterAQuitar = /-/g;
        temp = temp.replace(caracterAQuitar, '');
        if (this._SePermiteNegativo) {
            if (this._SePermiteNegativo == 1)// se permite signo negativo
            {
                if (tieneNegativo) temp = '-' + temp;
            }
        }
        return temp;
    },
    // para la validacion de  decimales
    _controlarPuntoDecimal: function(temp) {
        // Solo debe existir un punto decimal
        var reg3 = /\./g;
        var reg3Array = reg3.exec(temp);
        if (reg3Array != null) {
            // se conserva solamente la primera ocurrencia del punto. y en numero de decimales especificado en numeroDecimales 
            var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
            reg3Right = reg3Right.replace(reg3, '');
            reg3Right = this._NumeroDecimales > 0 ? reg3Right.substring(0, this._NumeroDecimales) : "";
            temp = temp.substring(0, reg3Array.index) + '.' + reg3Right;
        }
        return temp;
    },
    _darFormatoDecimal: function(temp) {
        var caracterAQuitar = /'/g;
        temp = temp.replace(caracterAQuitar, '');
        var caracterAQuitar = /,/g;
        temp = temp.replace(caracterAQuitar, '');
        var Num = temp;
        var newNum = "";
        var newNum2 = "";
        var count = 0;
        if (Num.length > 0) {
            //verificamos la parte decimal
            if (Num.indexOf('.') != -1) {  //el numero termina en un punto decimal
                if (Num.indexOf('.') == Num.length - 1) {
                    Num += "00";
                }
                if (Num.indexOf('.') == Num.length - 2) { //numero termina en un digito
                    Num += "0";
                }

                var a = Num.split(".");
                Num = a[0];   //la parte que debemos formatear con comas
                var end = a[1] //la parte decimal puede ser ignorada y agregada al final 
            }
            else { var end = "00"; }

            //este bucle agrega las comas
            for (var k = Num.length - 1; k >= 0; k--) {
                var oneChar = Num.charAt(k);
                if (count == 3) {
                    newNum += ",";
                    newNum += oneChar;
                    count = 1;
                    continue;
                }
                else {
                    newNum += oneChar;
                    count++;
                }
            }  //ahora la cadena esta invertida
            //re-invertimos la cadena
            for (var k = newNum.length - 1; k >= 0; k--) {
                var oneChar = newNum.charAt(k);
                newNum2 += oneChar;
            }

            // agregamos signo y parte decimal
            if (this._NumeroDecimales > 0) {
                if (end.length >= this._NumeroDecimales) {
                    end = end.substring(0, this._NumeroDecimales);
                }
                newNum2 = newNum2 + "." + end;
            }
        }
        return newNum2;
    },
    _darFormatoEntero: function(temp) {
        /*var caracterAQuitar = /'/g;
        var tempfinal =temp
        tempfinal = temp.replace(caracterAQuitar,'');
        caracterAQuitar = /,/g;
        tempfinal= tempfinal.replace(caracterAQuitar,'');
        caracterAQuitar = /./g;
        tempfinal= tempfinal.replace(caracterAQuitar,'');
        return tempfinal;*/
        return temp;

    }


}
WeclValidador.WeclValidadorBehavior.registerClass('WeclValidador.WeclValidadorBehavior', Sys.Extended.UI.BehaviorBase);
